package com.cn.springcloudwechat.service.vaccine.weixinService;

import com.cn.springcloudwechat.common.utils.weixin.vo.api.Template;
import com.cn.springcloudwechat.model.weixin.user.Follower;
import com.cn.springcloudwechat.model.weixin.user.WxFollower;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

public interface WeiXinService {
	/**
	 * 获取open_id
	 *@方法名:getOpenId
	 *@描述:
	 *@param code
	 *@return
	 */
	String getOpenId(String code);
	/**
	 * @方法名:getWXUserByOpenId
	 * @描述:根据openId获取用户昵称信息
	 * @param openId
	 * @return
	 */
	Follower getWXUserByOpenId(String openId);

	/**
	 * 上传临时素材
	 * 
	 * @方法名:getMeaid
	 * @描述:
	 * @param path
	 * @param index
	 * @return
	 */
	String getMediaId(HttpServletRequest request, String path, String index);

	/**
	 * 获取二维码的ticket
	 * 
	 * @方法名:geTicket
	 * @描述:
	 * @param sceneId
	 * @param expireSeconds
	 * @return
	 */
	Map<String,Object> geTicket(String sceneId, int expireSeconds);

	/**
	 * 获取二维码
	 * 
	 * @方法名:getQR
	 * @描述:
	 * @param ticket
	 * @return
	 */
	Map<String,Object> getQR(String ticket);

	/**
	 * 群发消息
	 * 
	 * @方法名:sendMassMessage
	 * @描述:
	 * @param media_id
	 * @return
	 */
	String sendMassMessage(String media_id);

	/**
	 * 推送客户消息
	 */
	String sendMessage(String message, String openId);

	/**
	 * 创建标签
	 * 
	 * @方法名:create_tag
	 * @描述:
	 * @param name
	 * @return
	 */
	String create_tag(String name);

	/**
	 * 查询标签
	 * 
	 * @方法名:
	 * @描述:
	 * @return
	 */
	String query_tag();

	/**
	 * 编辑标签
	 * 
	 * @方法名:update_tag
	 * @描述:
	 * @param id
	 * @param name
	 * @return
	 */
	String update_tag(String id, String name) throws UnsupportedEncodingException;

	/**
	 * 删除标签
	 * 
	 * @方法名:Delete_tag
	 * @描述:
	 * @param id
	 * @return
	 */
	String Delete_tag(String id) throws UnsupportedEncodingException;

	/**
	 * 获取标签下粉丝列表(某个标签) tag_id 标签 open_id 从某个粉丝开始拉取 (不填默认从头拉取)
	 */
	String query_tag_user_list(String tag_id, String open_id) throws UnsupportedEncodingException;

	/**
	 * 批量为用户打标签
	 * 
	 * @方法名:add_tag_user
	 * @描述:
	 * @param tag_id
	 * @param list
	 * @return
	 */
	String add_tag_user(String tag_id, List<String> list) throws UnsupportedEncodingException;

	/**
	 * 为用户批量取消标签
	 * 
	 * @方法名:channel_tag_user
	 * @描述:
	 * @param tag_id
	 * @param list
	 * @return
	 */
	String channel_tag_user(String tag_id, List<String> list) throws UnsupportedEncodingException;

	/**
	 * 获取用户所在的标签
	 * 
	 * @方法名:get_tag_user
	 * @描述:
	 * @param open_id
	 * @return
	 */
	String get_tag_user(String open_id) throws UnsupportedEncodingException;

	/**
	 * 获取关注者用户列表(拉取粉丝 一次最多10000) 从next_openid开始拉取
	 * 只能获取到openid和关注数量
	 */
	String get_user_list(String next_openid);
	/**
	 * 批量获取用户基本信息[最多拉取100条]
	 * 
	 * @param openid
	 *            批量用户集合{@link }
	 * @return 关注用户{@link Follower}
	 */
	List<Follower> getFollowers(String openid[]);
	/**
	 * 添加客户账号
	 * 
	 * @方法名:addCustomer
	 * @描述:
	 * @param kf_account
	 *            完整客服帐号，格式为：帐号前缀@公众号微信号，帐号前缀最多10个字符，必须是英文、数字字符或者下划线，后缀为公众号微信号，
	 *            长度不超过30个字符
	 * @param nickname
	 * @return
	 */
	String addCustomer(String kf_account, String nickname) throws UnsupportedEncodingException;

	/**
	 * 绑定客户到微信
	 * 
	 * @方法名:bindingCustmoerWeixin
	 * @描述:
	 * @param kf_account
	 *            完整客服帐号，格式为：帐号前缀@公众号微信号，帐号前缀最多10个字符，必须是英文、数字字符或者下划线，后缀为公众号微信号，
	 *            长度不超过30个字符
	 * @param invite_wx
	 *            接收绑定邀请的客服微信号
	 * @return
	 */
	String bindingCustmoerWeixin(String kf_account, String invite_wx) throws UnsupportedEncodingException;
	/**
	 * 上传客服头像
	 *@方法名:uploadCustomerHeadurl
	 *@描述:
	 *@param kf_account
	 *@param path
	 *@return
	 */
	String uploadCustomerHeadurl(String kf_account, String path);
	/**
	 * 获取客户头像
	 *@方法名:getCustomer
	 *@描述:
	 *@return
	 */
	String getCustomer();
	/**
	 * 修改客户昵称
	 *@方法名:updateCustomer
	 *@描述:
	 *@param kf_account
	 *@param nick_name
	 *@return
	 */
	String updateCustomer(String kf_account, String nick_name) throws UnsupportedEncodingException;
	/**
	 * 创建会话
	 *@方法名:createDialogue
	 *@描述:
	 *@param kf_account
	 *@param openid
	 *@return
	 */
	String createDialogue(String kf_account, String openid) throws UnsupportedEncodingException;
	/**
	 * 关闭某个客户的会话
	 * 
	 * @方法名:deleteDialogue
	 * @描述:
	 * @param openid
	 * @return
	 */
	String deleteDialogue(String kf_account, String openid) throws UnsupportedEncodingException;

	/**
	 * 获取客户会话状态
	 * 
	 * @方法名:getDialogueStatus
	 * @描述:
	 * @param openid
	 * @return kf_acount 正在接待的客服，为空表示没有人在接待 createtime 会话接入的时间
	 */
	String getDialogueStatus(String openid);

	/**
	 * 获取客服会话列表
	 * 
	 * @方法名:getCustomerList
	 * @描述:
	 * @param kf_account
	 * @return
	 */
	String getCustomerList(String kf_account);

	/**
	 * 获取客户未接入会话列表
	 * 
	 * @方法名:noDialogue
	 * @描述:
	 * @return
	 */
	String noDialogue();

	/**
	 * 获取聊天记录
	 * 
	 * @方法名:getChatRecord starttime 起始时间， unix时间戳 endtime
	 *                    结束时间，unix时间戳，每次查询时段不能超过24小时 msgid 消息id顺序从小到大，从1开始
	 *                    number 每次获取条数，最多10000条
	 * @描述:
	 * @return worker 完整客服帐号，格式为：帐号前缀@公众号微信号 openid 用户标识 opercode
	 *         操作码，2002（客服发送信息），2003（客服接收消息） text 聊天记录 time 操作时间，unix时间戳
	 *        若获取的number和请求的number一致 则可能会有聊天记录没获取完,再次拉取msgid和返回设置为一样再次请求此接口
	 */
	String getChatRecord(String starttime, String endtime, String msgid, String number) throws UnsupportedEncodingException;


	/**
	 * 获取用户头像
	 * @param openId
	 * @return
	 */
	String getNewHead(String openId);

	/**
	 * 获取模板id
	 * @return
	 */
	String getTemplateId(String tmcode);
	/**
	 * 获取自己公众号的
	 * @return
	 */
	String getTemplateId();
	/**
	 * 发送模板消息
	 *
	 * @param openId
	 *            接收用户Id
	 * @param tmlId
	 *            模板Id
	 * @param topColor
	 *            顶部颜色
	 * @param url
	 *            跳转链接
	 * @param tmls
	 *            模板数据
	 * @return 消息Id
	 */
	long sendTemplateMsg(String openId, String tmlId, String topColor, String url, Template... tmls);


}
